#include "logindialog.h"
#include "ui_logindialog.h"
#include <QMessageBox>
#include <QValidator>
#include "mainwindow.h"

LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
    this->setWindowTitle("HaiSpace登录界面");   //设置窗口标题
    this->setWindowIcon(QIcon(":/1.png"));      //设置窗口图标
    //设置帐号格式(0, 1000000000 为输入的数字值范围)
    ui->line_id->setValidator(new QIntValidator(0, 1000000000, this));
    QRegExp rx("([0-9]|[A-Z]|[a-z])*");        //正则表达式
    QValidator *validator = new QRegExpValidator(rx, this);
    ui->line_pwd->setValidator(validator);      //设置密码输入格式(英文大小写和数字)
    ui->line_pwd->setMaxLength(16);             //设置密码输入最大长度
    ui->line_pwd->setEchoMode(QLineEdit::Password);    //设置编辑框为密码形式

    ui->line_id->setText("791342685");          //默认帐号
    ui->line_pwd->setText("15071339704XUwei");  //默认密码
}

LoginDialog::~LoginDialog()
{
    delete ui;
}

void LoginDialog::on_btn_cancel_clicked()   //"退出"按钮单击响应
{
    close();    //退出登录界面
}

void LoginDialog::on_btn_ok_clicked()       //提交登录信息
{
    int serv_fd;
    QString str_id, str_pwd;
    str_id = ui->line_id->text();       //等到帐号信息
    str_pwd = ui->line_pwd->text();     //得到密码信息
    if(str_id == ""||str_pwd == "")      //判断是否为空
    {
        loginException("请输入帐号和密码");
        return ;
    }
    serv_fd = socket(AF_INET, SOCK_STREAM, 0);  //建立与服务器进行通信的套接字(流式)
    if(serv_fd < 0)     //建立套接字失败
    {
        loginException("程序运行异常");
        return ;
    }
    bool bFlag = connectServer(serv_fd);        //与服务器进行连接(connect)
    if(!bFlag)          //连接失败
    {
        loginException("连接服务器失败");
        return ;
    }
    QString username;
    //向服务器发送登录信息进行验证
    bFlag = checkUserInfo(serv_fd, str_id, str_pwd, username);
    if(!bFlag)          //验证失败(用户名或密码不正确|该帐号已经登录)
    {
        loginException("用户名或密码不正确");
        return ;
    }
    emit loginFinished(serv_fd, str_id.toInt(), username);  //登录成功,发送信号开启聊天室
    close();    //关闭登录界面
}

void LoginDialog::loginException(QString str)       //显示登录过程中的异常
{
    QMessageBox::information(this, tr("登录提示"), str);
}
